package lib

func init() {
	Probs = append(Probs, Problem{
		Num:         318,
		Discription: "最大无公共字母的单词长度乘积",
		Level:       1,
		Labels: map[string]int{
			"位运算":     1,
			"二进制状态表示": 1,
		},
	})
}

func MaxProduct2(words []string) int {
	n := len(words)
	temp := make([]int32, n)
	//快速比较两个字符之间有没公共字符（仅限只有小写字母或者只有大写字母，更多的话int的位数也需要更多）
	//每一个字母-'a'后在int对应的位数变成1，比较时&两个字符
	for i, word := range words {
		val := int32(0)
		for j := range word {
			ch := word[j]
			val |= 1 << (ch - 'a')
		}
		temp[i] = val
	}

	res := 0
	for i := 0; i < n-1; i++ {
		for j := 1; j < n; j++ {
			if temp[i]&temp[j] == 0 {
				res = max(res, len(words[i])*len(words[j]))
			}
		}
	}

	return res
}
